Skip to main content

04 GPIO实验

按键实验 蜂鸣器实验

up的视频讲解: https://space.bilibili.com/1455872040

例程代码: 📥按键点灯实验代码

1 🔽 按键点灯实验​

1.1 实验连接​

图片

1.2 实验原理​

图片
  • 这里是按键电路 它直接连接芯片的PA0引脚
  • 当我们按下按键的时候 相当于 直接把PA0短接到3.3伏电源
  • 这个高电平信号就输入进了IO口
图片
  • 然后进入到GPIO外设的输入部分 通过施密特触发器后存入输入寄存器中
  • 然后 我们就可以使用HAL_GPIO_ReadPin()函数 不断地去读这个位的值
  • 如果这个值从零变到了1 就代表着按键按下
图片
  • 当调用HAL_GPIO_WritePin()函数去控制这个引脚输出高电平的时候
  • BSRR对应的位就写为1 然后BSRR寄存器又将ODR寄存器对应位写为1
  • 接着ODR寄存器 控制Output control输出控制电路让PMOS导通 NMOS管断开
  • 从而让IO口输出高电平 然后将我们的灯点亮

1.3 CubeMX配置​

PA0 GPIO_Input Pull-down,按下接3.3 V

图片
图片

PA1 GPIO_Output Push Pull,初始Low,Low速度即可

图片

1.4 实验代码​

全局​

main()​

while(1)里面​

		if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == 1)//按键按下
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,1);//黄灯亮
}
else
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,0);//黄灯灭
}

2 🌻 光照/温度 点灯实验​

2.1 实验连接​

图片

2.2 实验原理​

图片

我们详细看下这个比较器 它内部包含两个运算放大器 的正极也叫同相端 负极也叫反相端

  • 当同相端的电压大于反相端时 比较器就输出高电平 反之 当同相端小于反相端时 就输出低电平

  • 同相端为AO点电压信号 由光敏电阻分压得到 可以反应当前光照强度

  • 反相端电压由电位器也就是我们蓝色的滑阻决定

光敏/热敏 传感器阈值调调节

我们可以通过一字螺丝刀进行调节 up设计的原则是: 顺时钟减小 逆时针增大

  • 逆时针增大光的阈值 需要更大的光才能把蓝色信号灯 点亮
图片
  • 当光照变强的时候 光敏电阻阻值减小 AO点电位减小
  • 当AO点电位 小于滑阻电位时 比较器就输出低电平 此时LED导通 LED被点亮
  • up在输出简单 加了一个上拉电阻 这样比较器在没有输出的时候就默认为高电平
  • 在光照强度大于 滑阻设定的阈值的时候就输出低电平并把灯点亮

2.3 CubeMX配置​

我们可以复用按键点灯的配置

2.4 实验代码​

我们可以复用按键点灯的代码

3 📢 按键启动蜂鸣器实验原理​

3.1 实验连接​

图片

3.2 实验原理​

图片
  • 电路很简单就是我们的IO口控制一个三极管 从而控制蜂鸣器工作

  • 先简单认识一下三极管 三极管顾名思义有三个极

  • 它们分别是 集电极 基极 发射极

  • 其实你就可以把它看成一个按键开关 当基极比发射极大0.7V时 就相当于按下按键 此时集电极和发射极就 导通

  • 所以我们将IO口连接蜂鸣器 然后让IO口输出高电平 就可以让蜂鸣器工作了

3.3 CubeMX配置​

我们可以复用按键点灯的配置

3.4 实验代码​

我们可以复用按键点灯的代码

✅实验验收与常见问题​

分别记录按键松开/按下、传感器亮/暗时的输入电平,再决定程序判断0还是1。比较器DO是阈值结果,AO是连续变化的模拟电压,两者用途不同。

练习:把“按住才亮”改成“按一次翻转一次”。这时要识别边沿并去抖,不能在while里只要读到1就不停翻转。完整的事件处理思路见调试补充。